草庐IT

Java Swingworker 和多线程

全部标签

java - 如果线程在同步块(synchronized block)中抛出异常会发生什么

考虑多个线程正在尝试访问临界区,一个线程在同步块(synchronizedblock)内发生异常会发生什么,它具有wait()和notify()来累积和释放锁。 最佳答案 同步监视器将被释放:“如果主体的执行曾经完成,无论是正常还是突然,都会在同一监视器上自动执行解锁操作。”Java语言规范17.1.Synchronization.其他线程将能够继续同步,并调用wait和notify。如果发生异常的线程持有一些关键的程序逻辑资源,您可能需要使用try-finally来确保它被释放。 关于

java - 那些以 "pool"开头的 java 线程是什么?

我的Tomcat服务器出现问题,无法正常关闭。我在发出关闭命令后进行了线程转储,它看起来像这样:http://pastebin.com/7SW4wZN9我认为不允许VM关闭的“可疑”线程是名为“pool-4-thread-1”的线程。其余的是守护线程或内部VM线程。在试图找出这个线程的用途时,我注意到还有其他Java程序创建了具有相似名称的线程(例如,JVisualVM创建了这样的线程)。所以我想知道是否有人知道这个线程是什么以及如何创建它。 最佳答案 这些线程可能是由您在代码中某处(直接或间接通过库)创建的ExecutorServ

java - 编写一个有 2 个线程的程序,交替打印

我最近在面试中被问到这个问题。Writeaprogramwithtwothreads(AandB),whereAprints1,Bprints2andsoonuntil50isreached.我们该怎么做? 最佳答案 赋值的本质是演示一个线程如何向另一个线程发送信号。最常见的方式是使用阻塞队列,但这里一个信号不携带任何信息,所以一个信号量就足够了。创建用2个信号量参数化的线程类:输入和输出:classThreadPrinterimplementsRunnable{intcounter;Semaphoreins,outs;Thread

java - 使用 Executors 服务在 Java 中创建固定大小线程池的最佳方式

我正在使用Java中的Executors框架为多线程应用程序创建线程池,我有一个与性能相关的问题。我有一个可以在实时或非实时模式下工作的应用程序。如果是实时的,我只是使用以下内容:THREAD_POOL=Executors.newCachedThreadPool();但如果不是实时的,我希望能够控制线程池的大小。为此,我正在考虑2个选项,但我不太了解其中的区别,以及哪个会表现更好。选项1是使用简单的方法:THREAD_POOL=Executors.newFixedThreadPool(threadPoolSize);选项2是创建我自己的ThreadPoolExecutor,如下所示:R

java - 最终阻塞在守护线程中

我知道守护线程中的finallyblock不会被执行。但是我一丝不苟的本性试图理解为什么以及在JVM中发生的事情如此特殊以至于它无法调用此block下的代码。我认为它在某种程度上与无法展开的调用堆栈有关,但不知道如何展开。有人可以对此有所了解吗?谢谢。 最佳答案 谁说守护线程中的finallyblock不执行?一般来说,这不是正确的。您可能听说在执行try期间关闭JVM时,不能保证执行finallyblock>(或catch)block。这是正确的(守护线程很容易发生这种情况)。但同样:在正常操作期间,没有什么可以阻止finally

java - 什么时候在 Java 中选择多个进程而不是线程?

出于什么原因,人们会选择多个进程而不是多个线程来用Java实现一个应用程序?我正在重构一个较旧的Java应用程序,该应用程序目前分为几个运行在同一台多核机器上的较小应用程序(进程),它们通过套接字相互通信。我个人认为这应该使用线程而不是进程来完成,但是有什么论点可以为最初的设计辩护呢? 最佳答案 我(和其他人,请参阅下面的归因)可以想到几个原因:历史原因该设计源于只有绿色线可用的时代,原作者/设计师认为它们不适合他。健壮性和容错性您使用的组件不是线程安全的,因此如果不借助多个进程就无法并行化。有些组件存在问题,您不希望它们影响多个进

C++11 Thead线程库的基本使用

文章目录创建线程传递参数等待线程完成分离线程joinable()创建线程要创建线程,我们需要一个可调用的函数或函数对象,作为线程的入口点。在C++11中,我们可以使用函数指针、函数对象或lambda表达式来实现。创建线程的基本语法如下:#include//头文件usingnamespacestd;threadt(function_name,args...);`function_name`是线程入口点的函数或可调用对象`args...`是传递给函数的参数创建线程后,我们可以使用t.join()等待线程完成,或者使用t.detach()分离线程,让它在后台运行。#include#includeus

java - 有没有办法在 Android Studio 中监控线程?

我有一个AndroidJava应用程序,我在AndroidStudio中创建并在三星平板电脑上运行它(根本不使用虚拟设备)。我有三个线程,我相信其中一个可能会陷入某种循环,因为应用程序在某个时候会严重变慢,但不会永远变慢。是否有一些工具可以监控我的应用程序和所有线程的CPU、RAM等使用情况?谢谢 最佳答案 AndroidMonitortools替换为AndroidProfiler,在AndroidStudio3.0:AndroidProfiler-AndroidStudio3.0includesabrandnewsuiteofto

java - 在 Swing 应用程序中应该从哪个线程调用 System.exit()?

在Swing应用程序中,可以从任何线程调用System.exit()吗?(例如在美国东部时间?) 最佳答案 如果可以的话,您不应该调用System.exit()。退出java进程最好的方法就是让所有线程正常退出。这将终止VM。在您的主JFrame中,您应该setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE)。然后可以调用frame.dispose()关闭JFrame并退出EDT。 关于java-在Swing应用程序中应该从哪个线程调用System.

Java 垃圾回收线程优先级

我在面试中被问到以下问题:“垃圾收集线程的默认优先级是多少?”我知道我们不能强制GC或更改其优先级,但我从未听说过它的默认优先级。有人知道吗? 最佳答案 可能面试官正在寻找的答案是GC处于低优先级的后台进程。这样做的原因是运行GC是昂贵的,但它不是(通常)关键进程,所以它应该只在系统有时间做而不是中断关键任务时进行。(实时系统中也存在类似的想法——将不重要的进程放在后台任务中,将所有关键进程放在前台——所有这些都将比后台任务具有更高的优先级。)话虽如此,如果您阅读Sun有关垃圾收集的文献,就会发现仅将GC作为低优先级线程运行是完全不